//定制请求的实例

//导入axios  npm install axios
import axios from 'axios';


import {ElMessage} from 'element-plus'
//定义一个变量,记录公共的前缀  ,  baseURL
// const baseURL = 'http://localhost:8080';
const baseURL = '/api';
const instance = axios.create({baseURL})

import {useTokenStore} from "@/stores/token.js"
import {adminTokenStore} from "@/stores/adminToken.js";

import router from "@/router";
// 添加请求拦截器
// instance.interceptors.request.use(
//     (config) => {
//         //请求前的回调
//         //添加token
//         const tokenStore = useTokenStore();
//
//         console.log(tokenStore.token);
//
//         //判断有没有token
//         if (tokenStore.token != null) {
//             console.log("请求拦截器：" + tokenStore.token);
//             config.headers.Authorization = tokenStore.token;
//         }
//         return config;
//     },
//     (error) => {
//         //请求错误的回调
//         Promise.reject("请求拦截器：" + error);
//     }
// )

// 添加请求拦截器
instance.interceptors.request.use(
    (config) => {
        // 获取请求路径
        const requestPath = config.url;
        
        // 判断是否是管理员接口
        const isAdminRequest = requestPath.startsWith('/admin');
        
        if (isAdminRequest) {
            // 管理员请求，使用管理员token
            const adminStore = adminTokenStore();
            if (adminStore.token) {
                config.headers['token'] = adminStore.token;
            }
        } else {
            // 用户请求，使用用户token
            const userStore = useTokenStore();
            if (userStore.token) {
                config.headers['authentication'] = userStore.token;
            }
        }

        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

//添加响应拦截器
instance.interceptors.response.use(
    result=>{

        if(result.data.code === 0){
            return result.data;
        }

        // 显示错误消息，如果result.msg存在则显示result.msg，否则显示"服务异常"
        ElMessage.error(result.data.msg ? result.data.msg : '服务异常');
        //异步操作的状态转为失败
        return Promise.reject(result.data)
    },
    err=>{
        // 如果err.response存在，说明收到了服务器的响应
        switch (err.response.status) {
            case 401:
                ElMessage.error('认证失败，请重新登录');
                // 清除所有本地存储
                localStorage.clear();
                // 判断当前路径是否包含 admin，决定重定向到哪个登录页
                const isAdminPath = window.location.pathname.includes('/admin');
                router.push(isAdminPath ? '/adminLogin' : '/');
                break;
            case 403:
                ElMessage.error(err.response.data.msg || '您的账号已被禁用，请联系超级管理员');
                // 如果是管理员路径，跳转到管理员登录页
                if (window.location.pathname.includes('/admin')) {
                    localStorage.removeItem('adminToken');
                    router.push('/adminLogin');
                }
                if (window.location.pathname.includes("/user")) {
                    localStorage.removeItem('userToken');
                    router.push('/');
                }
                break;
            case 404:
                ElMessage.error('请求的资源不存在');
                break;
            case 500:
                ElMessage.error('服务器内部错误，请稍后再试');
                break;
            default:
                ElMessage.error(`请求失败，状态码：${err.response.status}`);
                break;
        }

        return Promise.reject(err.message)
    }
)

export default instance;